package com.cskaoyan.javase.oop3._1interface._2exercise;

/**
 * 接口的语法练习:
 * 教练（Coach）和运动员（Sportsman）案例
 * 小试牛刀请用所学知识分析：这个案例中有哪些抽象类，哪些接口，哪些具体类。
 * 现在有乒乓球运动员和篮球运动员，乒乓球教练和篮球教练。为了能够出国交流，跟乒乓球相关的人员都需要学习英语。
 *
 * 抽象类: 抽象教练类(AbstractCoach) 抽象运动员类(AbstractSportsman)
 * 接口: 学习的接口(ILearning)
 * 具体类: 篮球运动员,乒乓球运动员,篮球教练,乒乓球教练
 *
 * 问题:
 *      1.接口中没有构造方法,那么接口的实现类对象的初始化,依赖于哪个父类构造器?
 *      如果这个实现类有明显的直接父类,那么就用这个直接父类的构造器,如果没有用Object类的无参构造器.
 *
 *      2.接口有没有继承Object?
 *          严格来说,接口有继承Object
 *          并且接口的实现类也必然继承Object
 *          所以接口的引用是可以去使用Object类的成员
 *
 * @since 16:18
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        TableTennisCoach tc = new TableTennisCoach();
        AbstractCoach ac = new TableTennisCoach();
        ILearning i = new TableTennisCoach();

        ILearning a;
    }
}

abstract class AbstractCoach {
    String name;
    int age;

    public abstract void teach();
}

abstract class AbstractSportsman {
    double salary;

    public abstract void training();
}

interface ILearning {
    void learnEnglish();
}

// 篮球运动员
class BasketballSportsman extends AbstractSportsman {
    @Override
    public void training() {
        System.out.println("教练,我想打篮球!");
    }
}

// 乒乓球教练
class TableTennisCoach extends AbstractCoach implements ILearning {
    @Override
    public void teach() {
        System.out.println("我教你打乒乓球!");
    }

    @Override
    public void learnEnglish() {
        System.out.println("我要学英语!");
    }

    public TableTennisCoach() {
        // super();
    }
}